Diagrama de Campbell#
O referido diagrama foi obtido modelando-se o o rotor com base na formulação apresentada no livro texto. As frequências naturais foram resolvidas por meio da solução do polinômio característico utilizando-se o módulo scipy.optimize.fsolve e a velocidades critícas foram obtidas por meio do método de numérico de Newton-Raphson implementado em scipy.optimize.newton, conforme segue:
'''
Importando bibliotecas de terceira parte
'''
import numpy as np
import pandas as pd
'''
Importando a bilbioteca criada para a realização das análises dinâmicas
no contexto da disciplina
'''
import rotor_analysis as rd
'''
Configurando pint.Quantity
'''
Q_ = rd.Q_
# Defining Material instances and properties
steel = rd.Material(name='Steel',
density=Q_(7800, 'kg/m^3'),
young_modulus=Q_(2e11,"Pa"))
print(steel)
Material(Steel)
Density: 7800 kg/m³
Young's Modulus: 200000000000.0 Pa
# Shaft
L = Q_(0.4, 'm')
shaft = rd.Shaft(outer_radius=Q_(0.01, 'm'),
inner_radius=Q_(0.0, 'm'),
length=L,
material=steel)
print(shaft, shaft.material, sep="\n")
Shaft(outer=0.01 m, inner=0.0 m)
Material: Steel
Outer Radius: 0.01 m
Inner Radius: 0.0 m
Length: 0.4 m
Density: 7800 kg/m³
Volume: 1.2566×10⁻⁴ m³
Mass: 0.9802 kg
Cross-sectional Area: 3.1416×10⁻⁴ m²
Surface Area: 2.5761×10⁻² m²
Area Moment of Inertia, x: 7.8540×10⁻⁹ m⁴
Area Moment of Inertia, y: 7.8540×10⁻⁹ m⁴
Polar Moment of Inertia, z: 1.5708×10⁻⁸ m⁴
Mass Moment of Inertia, x: 1.3094×10⁻² kg·m²
Mass Moment of Inertia, y: 4.9009×10⁻⁵ kg·m²
Mass Moment of Inertia, z: 1.3094×10⁻² kg·m²
Material(Steel)
Density: 7800 kg/m³
Young's Modulus: 200000000000.0 Pa
# Disc
disc = rd.Disc(outer_radius=Q_(0.150, 'm'),
inner_radius=Q_(0.010, 'm'),
length=Q_(0.030, 'm'),
material=steel,
coordinate=L/3)
print(disc, disc.material, sep="\n")
Disc(outer=0.15 m, inner=0.01 m)
Material: Steel
Outer Radius: 0.15 m
Inner Radius: 0.01 m
Length: 0.03 m
Density: 7800 kg/m³
Volume: 2.1112×10⁻³ m³
Mass: 16.4670 kg
Cross-sectional Area: 7.0372×10⁻² m²
Surface Area: 1.7090×10⁻¹ m²
Area Moment of Inertia, x: 3.9760×10⁻⁴ m⁴
Area Moment of Inertia, y: 3.9760×10⁻⁴ m⁴
Polar Moment of Inertia, z: 7.9520×10⁻⁴ m⁴
Mass Moment of Inertia, x: 9.4273×10⁻² kg·m²
Mass Moment of Inertia, y: 1.8608×10⁻¹ kg·m²
Mass Moment of Inertia, z: 9.4273×10⁻² kg·m²
Material(Steel)
Density: 7800 kg/m³
Young's Modulus: 200000000000.0 Pa
# Creating a Rotor instance
rotor_0 = rd.Rotor(
shaft,
disc
)
print(f"Natural Frequency at 0 rpm: {rotor_0.omega_0[1]:0.3f} Hz.")
data_0, fig_0 = rotor_0.plot_Campbell(return_data=True)
fig_0.show()
Natural Frequency at 0 rpm: 46.024 Hz.
Adicionando força axial ao rotor#
No primeiro approach de modelagem aplicando-se ao conjunto rotativo uma força axial, foi aplicada a força de 10000 N tracionando o rotor descrito no livro texto. Esta força foi caracterizada como positiva neste estudo.
F0 = 1e4
# Create a Rotor instance with axial force
rotor_1 = rd.Rotor(
shaft,
disc,
axial_force=Q_(+F0, 'N')
)
print(f"Natural Frequency at 0 rpm: {rotor_1.omega_0[1]:0.3f} Hz.")
data_1, _ = rotor_1.plot_Campbell(return_data=True)
Natural Frequency at 0 rpm: 48.341 Hz.
Já no segundo approach foi aplicada a força de 10000 N comprimindo o mesmo.
# Create a Rotor instance
rotor_2 = rd.Rotor(
shaft,
disc,
axial_force=Q_(-F0, 'N')
)
print(f"Natural Frequency at 0 rpm: {rotor_2.omega_0[1]:0.3f} Hz.")
data_2, _ = rotor_2.plot_Campbell(return_data=True)
Natural Frequency at 0 rpm: 43.584 Hz.
Comparação dos resultados#
Como pode ser visto abaixo, analisando as três modelagens (sem força axial, força positiva e força negativa), observa-se a alteração das frequências naturais – mesmo sem rotação. Com a aplicação da força de tração há um enrijecimento do sistema, elevando a frequência natural do mesmo. Já, o efeito oposto é observado quando a força negativa é aplicada.
O código abaixo gera uma representação gráfica do efeito dessas forças (positiva e negativa).
rd.campbell_diagram_axial_forces(
data_0,
data_1,
data_2,
F0
)
Expandido o código: representação no espaço de estados e o cálculo das frequëncias naturais#
Após a obtenção dos primeiros resultados, calculando-se as frequências naturais por meio do polinômio característico, foi implementado no código a obtenção das frequências naturais por meio do cálculo dos autovalores com auxílio da biblioteca scipy.optimize.eig.
Nesse sentido, foram calculados os autovalores da matrix A proveniente da formulação do problema utilizando-se a representação no espaço de estados.
'''
Computing the eigenvalues troughout matrix A (state-space representation matrix)
'''
eigenvalues, _ = np.linalg.eig(rotor_0.A(8640))
'''
Processing the eigenvalues
At this step the goal is to extract only positive eigenvalues and sort them by
value to help to identify backward and forward related eigenvalues.
'''
roots = set()
for i in eigenvalues:
roots.add(abs(i.imag / (2 * np.pi)))
roots = list(roots)
roots.sort(reverse=True)
# Data computed by means of Lalanne strategie
data = {
"Forward" : data_0['Forward'],
"Backward" : data_0['Backward']
}
# Create a DataFrame
df = pd.DataFrame(data,
index=data_0['Speed'])
# Display the DataFrame
print("Results solving the characteristc equation:")
print(df.loc[8640],'\n')
print("Results solving the state-space representation matrix:")
print('Forward: ', roots[0], '\tBackward: ', roots[1])
Results solving the characteristc equation:
Forward 62.703153
Backward 33.781547
Name: 8640.0, dtype: float64
Results solving the state-space representation matrix:
Forward: 62.70315311038263 Backward: 33.78154665241561
Expandindo o código para considerar dois discos#
# Disc
L_h = Q_(0.030 / 2, 'm')
disc0 = rd.Disc(outer_radius=Q_(0.150, 'm'),
inner_radius=Q_(0.010, 'm'),
length=L_h,
material=steel,
coordinate=L/3)
disc1 = rd.Disc(outer_radius=Q_(0.150, 'm'),
inner_radius=Q_(0.010, 'm'),
length=L_h,
material=steel,
coordinate=L/3 + L_h)
# Creating a Rotor isntance
rotor1 = rd.Rotor(shaft, disc0, disc1, max_speed = Q_(9000, 'rpm'))
print(f"Natural Frequency at 0 rpm: {rotor1.omega_0[0]:0.3f} Hz.")
rotor1.plot_Campbell()
Natural Frequency at 0 rpm: 45.255 Hz.